﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using CommonLibrary.Model;

namespace HierarchicModel.Model.Realization
{
    public class HierarchicAnalyzer : AbstarctGraphAnalyzer
    {
        private Engine engine;
        private EngineForConnectedComp engForConnectedComponent;
        private HierarchicGraph mTree;

        public HierarchicAnalyzer(HierarchicGraph tree)
        {
            this.engine = new Engine();
            engForConnectedComponent = new EngineForConnectedComp();
            mTree = tree;
        }

        public override SortedDictionary<int, int> GetDegreeDistribution()
        {
            SortedDictionary<int, int> result = new SortedDictionary<int,int>();
            return result;
        }

        //Calculate average parth of graph.
        public override double GetAveragePath()
        {
            double result = 0;
            return result;
        }

        //Calculate clustering coefficient of graph.
        public override SortedDictionary<double, int> GetClusteringCoefficient()
        {
            SortedDictionary<double, int> result = new SortedDictionary<double, int>();
            return result;
        }

        //Calculate Eigen values of graph.
        public override ArrayList GetEigenValue()
        {
            return new ArrayList();
        }

        //Calculate count of cycles in 3 lenght of graph.
        public override double GetCycles3()
        {
            double result = 0;
            return result;
        }

        //Calculate diameter of graph.
        public override double GetDiameter()
        {
            double result = 0;
            return result;
        }

        //Calculate distribution of connected subgraph of graph.
        public override SortedDictionary<int, int> GetConnSubGraph()
        {
            SortedDictionary<int, int> result = new SortedDictionary<int, int>();
            return result;
        }

        //Calculate count of cycles in 3 lenght based in eigen valu of graph.
        public override double GetCycleEigen3()
        {
            double result = 0;
            return result;
        }

        //Calculate count of cycles in 4 lenght of graph.
        public override double GetCycles4()
        {
            double result = 0;
            return result;
        }

        //Calculate count of cycles in 4 lenght based in eigen valu of graph.
        public override double GetCycleEigen4()
        {
            double result = 0;
            return result;
        }

        //Calculate motive of graph.
        public override void GetMotif()
        {
        }

        //Calculate distribution of minimum paths of graph.
        public override SortedDictionary<int, int> GetMinPathDist()
        {
            SortedDictionary<int, int> result = new SortedDictionary<int, int>();
            return result;
        }

        //Calculate distribution of eigen value of graph.
        public override SortedDictionary<double, int> GetDistEigenPath()
        {
            SortedDictionary<double, int> result = new SortedDictionary<double, int>();
            return result;
        }

        //Calculate distribution of connected subgraph of graph.
        public override SortedDictionary<int, int> GetFullSubGraph()
        {
            SortedDictionary<int, int> result = new SortedDictionary<int, int>();
            return result;
        }
    }
}
